/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.senac.academicnet.model;

import br.com.senac.academicnet.model.entidades.AlunoVO;
import br.com.senac.academicnet.model.entidades.ProfessorVO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

class AlunoProfessorDAO  {

    static void incluir(AlunoVO aluno) throws Exception {
        deletar(aluno);
        
        for (ProfessorVO professor : aluno.getProfessores()) {

            String sql = "INSERT INTO aluno_professor(codigo_aluno,codigo_professor)"
                    + " VALUES(?,?)";

            Connection conn = null;
            PreparedStatement pstm = null;

            try {
                // Cria uma conexão com o banco
                conn = ConnectionJDBCFactory.getConexao();

                // Cria um PreparedStatment, classe usada para executar a query
                pstm = conn.prepareStatement(sql);

                int i = 1;

                pstm.setInt(i++, aluno.getCodigo());
                pstm.setInt(i++, professor.getCodigo());
                
                // Executa a sql para inserção dos dados
                pstm.execute();

            } finally {

                // Fecha as conexões

                try {
                    if (pstm != null) {

                        pstm.close();
                    }

                    if (conn != null) {
                        conn.close();
                    }

                } catch (Exception e) {

                    e.printStackTrace();
                }
            }
        }
    }

    static void deletar(AlunoVO aluno) throws Exception {

        String sql = "DELETE FROM aluno_professor WHERE codigo_aluno = ?";

        Connection conn = null;
        PreparedStatement pstm = null;

        try {
            conn = ConnectionJDBCFactory.getConexao();

            pstm = conn.prepareStatement(sql);

            pstm.setInt(1, aluno.getCodigo());

            pstm.execute();

        } finally {

            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }

    static List<ProfessorVO> getProfessores(AlunoVO aluno) throws Exception {

        String sql;
        sql = "SELECT codigo_professor FROM aluno_professor where codigo_aluno = ? ";

        List<ProfessorVO> professores = new ArrayList<>();

        Connection conn = null;
        PreparedStatement pstm = null;
        // Classe que vai recuperar os dados do banco de dados
        ResultSet rset = null;

        try {
            conn = ConnectionJDBCFactory.getConexao();

            pstm = conn.prepareStatement(sql);
            
            pstm.setInt(1, aluno.getCodigo());

            rset = pstm.executeQuery();

            // Enquanto existir dados no banco de dados, faça
            while (rset.next()) {

                int codigoProfessor = rset.getInt("codigo_professor");

                professores.add(ProfessorDAO.getProfessor(codigoProfessor));
            }

        } finally {

            try {

                if (rset != null) {

                    rset.close();
                }

                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }

        return professores;
    }
    
    static List<AlunoVO> getAlunos(ProfessorVO professor) throws Exception {

        String sql;
        sql = "SELECT codigo_aluno FROM aluno_professor where codigo_professor = ? ";

        List<AlunoVO> alunos = new ArrayList<>();

        Connection conn = null;
        PreparedStatement pstm = null;
        // Classe que vai recuperar os dados do banco de dados
        ResultSet rset = null;

        try {
            conn = ConnectionJDBCFactory.getConexao();

            pstm = conn.prepareStatement(sql);
            
            pstm.setInt(1, professor.getCodigo());

            rset = pstm.executeQuery();

            // Enquanto existir dados no banco de dados, faça
            while (rset.next()) {

                int codigoAluno = rset.getInt("codigo_aluno");

                alunos.add(AlunoDAO.getAluno(codigoAluno));
            }

        } finally {

            try {

                if (rset != null) {

                    rset.close();
                }

                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }

        return alunos;
    }

}